import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static int L;
    public static int N;
    public static int M;
    public static int max = Integer.MIN_VALUE;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        L = sc.nextInt();
        N = sc.nextInt();
        M = sc.nextInt();
        int[] arr = new int[N + 2];
        arr[N + 1] = L;
        for (int i = 1; i < N + 1; i++) {
            arr[i] = sc.nextInt();
        }

        while (M >= 0) {
            dfs(1, M, arr);
            M--;
        }

        System.out.println(max);

        sc.close();
    }

    /**
     *
     * @param index 当前石头的下标
     * @param count 可移除的石头的个数
     */
    public static void dfs(int index, int count, int[] arr) {
        if (count == 0 || index == N + 1) {
            //已经移除了的石头
            int p = 0;
            while (arr[p] == 0) {
                p++;
            }
            int num = 0;
            int minSub = Integer.MAX_VALUE;
            while (p < N + 2) {
                minSub = Math.min(minSub, arr[p] - num);
                num = arr[p++];
                while (p < N + 2 && arr[p] == 0) {
                    p++;
                }
            }
            max = Math.max(minSub, max);
            return;
        }

        for (int i = index; i < N + 1; i++) {
            int num = arr[i];
            //移除
            arr[i] = 0;
            dfs(i + 1, count - 1, arr);
            //回溯
            arr[i] = num;

            //不移除
            dfs(i + 1, count, arr);
        }
    }
}
